package euler.p001_050;

import euler.MainEuler;

public class Euler043 extends MainEuler {

    /*
        The number, 1406357289, is a 0 to 9 pandigital number
        because it is made up of each of the digits 0 to 9 in some order,
        but it also has a rather interesting sub-string divisibility property.

        Let d(1) be the 1st digit, d2 be the 2nd digit,
        and so on. In this way, we note the following:

            d(2)d(3)d(4)=406 is divisible by 2
            d(3)d(4)d(5)=063 is divisible by 3
            d(4)d(5)d(6)=635 is divisible by 5
            d(5)d(6)d(7)=357 is divisible by 7
            d(6)d(7)d(8)=572 is divisible by 11
            d(7)d(8)d(9)=728 is divisible by 13
            d(8)d(9)d(10)=289 is divisible by 17

        Find the sum of all 0 to 9 pandigital numbers with this property.
     */
    public String resolve() {

        byte[][] permutaciones = naturalHelper.permutaciones("0123456789");

        long suma = 0;
        for (int i = 0; i < permutaciones.length; i++) {
            byte[] b = permutaciones[i];

            if (    (b[3]) % 2 == 0 &&
                    (b[2] + b[3] + b[4]) % 3 == 0  &&
                    (b[5]) % 5 == 0  &&
                    (100 * b[4] + 10 * b[5] + b[6]) % 7 == 0  &&
                    (100 * b[5] + 10 * b[6] + b[7]) % 11 == 0  &&
                    (100 * b[6] + 10 * b[7] + b[8]) % 13 == 0  &&
                    (100 * b[7] + 10 * b[8] + b[9]) % 17 == 0 ) {
                suma+=toLong(b);
            }
        }

        return String.valueOf(suma);
    }

    private long toLong(byte[] ba) {
        long n = 0;
        for (int i = 0; i < ba.length; i++) {
            n = (10*n+ba[i]);
        }
        return n;
    }
}
